3) 영역 채우기, 빗금, CSG 불리언 연산
Mathit에서는 여러 도형이 겹친 복잡한 영역이나 적분 구간의 넓이를 강조하기 위해 영역 채우기, 빗금 패턴, 그리고 도형의 합집합·교집합·차집합을 구하는 CSG 불리언 연산을 제공합니다.
1. 기본 영역 채우기
shade: 지시어는 다각형, 원, 함수 곡선으로 둘러싸인 닫힌 영역 내부를 단색이나 투명도가 적용된 색상으로 채웁니다.
// 단순 다각형 내부 채우기 (20% 불투명도 파란색)
shade: poly(A--B--C--D), fill=#blue/20
// 원 내부 채우기
C1 = circle(center=(0,0), r=3)
shade: C1, fill=#green/15
// 테두리 스타일과 채우기를 동시에 지정
shade: poly(A--B--C), fill=#red/30, stroke=1pt, color=#red
2. 빗금 및 격자 패턴
수학 교과서나 인쇄물에서 특정 영역을 강조할 때 자주 쓰이는 사선 빗금이나 격자 패턴을 손쉽게 적용할 수 있습니다.
2-1. 빗금 패턴 (hatch)
빗금의 각도(deg)와 간격(step)을 직접 지정합니다.
// 45도 각도, 2mm 간격의 사선 빗금
shade: poly(A--B--C), hatch=(45deg, step=2mm), color=#black
// -45도 각도의 빗금
shade: C1, hatch=(-45deg, step=3mm), color=#blue
2-2. 격자와 커스텀 패턴 (pattern)
십자 교차 빗금(crosshatch)이나 점 무늬 패턴을 적용합니다.
// 십자 격자 빗금 패턴
shade: R, pattern=crosshatch(step=2.5mm), color=#gray
3. CSG 불리언 연산
Mathit의 가장 큰 장점 중 하나는 두 개 이상의 도형 간 교집합, 합집합, 차집합을 수학 표현식으로 조합하여 채울 영역을 정의하는 것입니다.
교집합 (inter 또는 &)은 두 도형이 겹치는 영역입니다.
합집합 (union 또는 |)은 두 도형을 합친 전체 영역입니다.
차집합 (diff 또는 )은 첫 번째 도형에서 두 번째 도형을 뺀 영역입니다.
// 도형 정의
C1 = circle(center=(0, 0), r=2)
C2 = circle(center=(2, 0), r=2)
// 교집합 (두 원이 겹치는 렌즈 모양 영역)
shade: C1 inter C2, fill=#purple/30
// 차집합 (C1 원에서 C2 원 부분을 뺀 초승달 모양 영역)
shade: C1 diff C2, hatch=(45deg, step=2mm), color=#black
// 연산자 기호(&, -)를 사용한 숏컷 표현
shade: C1 & C2, fill=#yellow/40
shade: C1 - C2, fill=#red/20
4. 함수 곡선으로 둘러싸인 영역 채우기
두 곡선 사이의 넓이나 $x$축과의 사이 영역을 CSG 연산과 조합하여 직관적으로 나타낼 수 있습니다.
f = x^2 - 2
g = -x + 2
// f(x)와 g(x) 곡선으로 둘러싸인 교점 구간 영역 채우기
shade: region(f, g, x in -2..1), fill=#blue/20, stroke=dash
5. 전체적으로 본다면
// 두 원 선언
A = circle(center=(-1, 0), r=2)
B = circle(center=(1, 0), r=2)
// 집합 (A - B) 차집합 영역 빗금 채우기
shade: A - B, hatch=(45deg, step=2mm), color=#black
// 집합 (A & B) 교집합 영역 색상 채우기
shade: A & B, fill=#blue/30
// 원 테두리 그리기
draw: A, stroke=1.5pt
draw: B, stroke=1.5pt
// 라벨 부착
label: (-2, 0)"$A$"
label: (2, 0)"$B$"